package sixth.抽象类与接口的应用.设计模式.适配器模式;

/**
 * 对于Java程序设计 有时候并不需要接口的中的全部方法 ，只需要其中的几个方法
 * 而且如何如果一个类实现接口中的全部方法 就要覆写全部的抽象方法 如果一个接口定义的抽象方法过多 但是在子类中又用不多这么多方法
 * 则使用起来会很麻烦 所以这时候就需要一个中间过渡 但是这个过度类又不希望被直接使用
 * 所以把这个过渡类定义成抽象类最合适 即一个接口首先被抽象类先实现 （这个抽象类被称为适配器类）
 * 并在此抽象类中实现若干方法（方法体为空）
 * 此后的子类就可以有选择的覆写需要的方法
 */

interface Window{
    public void open();     //窗口打开
    public void close();    //窗口关闭
    public void activated();//窗口霍东阁
    public void iconified();//窗口最小化
    public void deiconified();//窗口恢复大小
}
//定义抽象类实现接口 在此类中覆写方法 但是所有的方法体都是空
abstract class WindowAdapter implements Window{
    public void open(){};     //窗口打开
    public void close(){};    //窗口关闭
    public void activated(){};//窗口霍东阁
    public void iconified(){};//窗口最小化
    public void deiconified(){};//窗口恢复大小
}
//子类直接继承WindowAdapter类 有选择的实现需要的方法
class WindowImpl extends WindowAdapter{
    @Override
    public void open() {
        System.out.println("窗口打开。。。");
    }

    @Override
    public void close() {
        System.out.println("窗口关闭。。。");
    }
}
public class 适配器设计实现 {
    public static void main(String[] args) {
        WindowImpl window = new WindowImpl();//实现接口对象
        window.open();
        window.close();
    }
}
/*
D:\WorkSpaces\Java\jdk-21\bin\java.exe "-javaagent:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\lib\idea_rt.jar=63670:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\WorkSpaces\JavaDevelopBase_start_329\out\production\JavaDevelopBase_start_329 sixth.抽象类与接口的应用.设计模式.适配器模式.适配器设计实现
窗口打开。。。
窗口关闭。。。

Process finished with exit code 0

 */
/**
 * 上述的程序因为采用了适配器这个环节 所以子类就不用必须实现接口中的全部方法 可以有选择的实现所需要的方法
 */